The BITMAPFILEHEADER data structure contains information about the type,
size, and layout of a device-independent bitmap (DIB) file.
typedef struct tagBITMAPFILEHEADER {
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER;
The BITMAPFILEHEADER data structure contains the following fields:
Field Description
bfType Specifies the type of file. It must be BM.
bfSize Specifies the size in DWORDs of the file.
bfReserved1 Is reserved and must be set to zero.
bfReserved2 Is reserved and must be set to zero.
bfOffBits Specifies in bytes the offset from the BITMAPFILEHEADER
of the actual bitmap in the file.
Comments A BITMAPINFO or BITMAPCOREINFO data structure immediately
follows the BITMAPFILEHEADER structure in the DIB file.
BITMAPINFO [3.0]
Device-Indpendent Bitmap Information
The BITMAPINFO structure fully defines the dimensions and color
information for a Windows 3.0 device-independent bitmap.
typedef struct tagBITMAPINFO {
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1];
} BITMAPINFO;
The BITMAPINFO structure contains the following fields:
Field Description
bmiHeader Specifies a BITMAPINFOHEADER data structure that
contains information about the dimensions and color format of a device-independent bitmap.
bmiColors Specifies an array of RGBQUAD data structures that
define the colors in the bitmap.
Comments: A Windows 3.0 device-independent bitmap consists of two
distinct parts: a BITMAPINFO data structure that describes the dimensions
and colors of the bitmap, and an array of bytes that define the pixels of
the bitmap. The bits in the array are packed together, but each scan line
must be zero-padded to end on a LONG boundary. Segment boundaries can
appear anywhere in the bitmap, however. The origin of the bitmap is the
lower-left corner.
The biBitCount field of the BITMAPINFOHEADER structure determines the
number of bits which define each pixel and the maximum number of colors
in the bitmap. This field may be set to any of the following values:
Value Meaning
1 The bitmap is monochrome, and the bmiColors field must
contain two entries. Each bit in the bitmap array represents a
pixel. If the bit is clear, the pixel is displayed with the
color of the first entry in the bmiColors table; if the bit is
set, the pixel has the color of the second entry in the table.
4 The bitmap has a maximum of 16 colors, and the bmiColors
field contains up to 16 entries. Each pixel in the bitmap is
represented by a four-bit index into the color table.
For example, if the first byte in the bitmap is 0x1F, then the
byte represents two pixels. The first pixel contains the color
in the second table entry, and the second pixel contains the
color in the 16th table entry.
8 The bitmap has a maximum of 256 colors, and the bmiColors
field contains up to 256 entries. In this case, each byte in the
array represents a single pixel.
24 The bitmap has a maximum of 2^24 colors. The bmiColors
field is NULL, and each three bytes in the bitmap array
represents the relative intensities of red, green, and blue,
respectively, of a pixel.
The biClrUsed field of the BITMAPINFOHEADER structure specifies the number
of color indexes in the color table actually used by the bitmap. If the
biClrUsed field is set to 0, the bitmap uses the maximum number of colors
corresponding to the value of the biBitCount field.
The colors in the bmiColors table should appear in order of importance.
Alternatively, for functions that use device-independent bitmaps, the
bmiColors field can be an array of 16-bit unsigned integers that specify
an index into the currently realized logical palette instead of explicit
RGB values. In this case, an application using the bitmap must call
device-independent bitmap functions with the wUsage parameter set to
DIB_PAL_COLORS.
Note: The bmiColors field should not contain palette indices if the
bitmap is to be stored in a file or transferred to another application.
Unless the application uses the bitmap exclusively and under its complete
control, the bitmap color table should contain explicit RGB values.
BITMAPINFOHEADER [3.0]
Device-Independent Bitmap Format Information
The BITMAPINFOHEADER structure contains information about the dimensions
and color format of a Windows 3.0 device-independent bitmap.
typedef struct tagBITMAPINFOHEADER{
DWORD biSize;
DWORD biWidth;
DWORD biHeight;
WORD biPlanes;
WORD biBitCount
DWORD biCompression;
DWORD biSizeImage;
DWORD biXPelsPerMeter;
DWORD biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BITMAPINFOHEADER;
The BITMAPINFOHEADER structure has the following fields:
Field Description
biSize Specifies the number of bytes required by the
BITMAPINFOHEADER structure.
biWidth Specifies the width of the bitmap in pixels.
biHeight Specifies the height of the bitmap in pixels.
biPlanes Specifies the number of planes for the target device and
must be set to 1.
biBitCount Specifies the number of bits per pixel. This value must
be 1, 4, 8, or 24.
biCompression Specifies the type of compression for a compressed
bitmap. It can be one of the following values:.
Value Meaning
BI_RGB Specifies that the bitmap is not
compressed.
BI_RLE8 Specifies a run-length encoded format
for bitmaps with 8 bits per pixel. The
compression format is a two-byte
format consisting of a count byte
followed by a byte containing a color
index. See the following 'Comments'
section for more information.
BI_RLE4 Specifies a run-length encoded format
for bitmaps with 4 bits per pixel. The
compression format is a two-byte
format consisting of a count byte
followed by two word-length color
indexes. See the following 'Comments'
section for more information.
biSizeImage Specifies the size in bytes of the image.
biXPelsPerMeter Specifies the horizontal resolution in pixels per meter of the target device for the bitmap. An application can use this value to select a bitmap from a resource group that best matches the characteristics of the current device. biYPelsPerMeter Specifies the vertical resolution in pixels per meter of the target device for the bitmap.
biClrUsed Specifies the number of color indexes in the color table
actually used by the bitmap. If this value is 0, the
bitmap uses the maximum number of colors corresponding
to the value of the biBitCount field. See the
description of the BITMAPINFO data structure earlier in
this chapter for more information on the maximum sizes
of the color table. If biClrUsed is nonzero, then the
biClrUsed field specifies the actual number of colors
which the graphics engine or device driver will access
if the biBitCount field is less than 24. If the
biBitCount field is set to 24, the biClrUsed field
specifies the size of the reference color table used to
optimize performance of Windows color palettes.
If the bitmap is a 'packed' bitmap (that is, a bitmap in
which the bitmap array immediately follows the
BITMAPINFO header and which is referenced by a single
pointer), the biClrUsed field must be set to 0 or to the
actual size of the color table.
biClrImportant Specifies the number of color indexes that are considered
important for displaying the bitmap. If this value is 0,
then all colors are important.
Comments: The BITMAPINFO data structure combines the
BITMAPINFOHEADER structure and a color table to provide a complete
definition of the dimensions and colors of a Windows 3.0
device-independent bitmap. See the description of the BITMAPINFO data
structure for more information about specifying a Windows 3.0
device-independent bitmap.
An application should use the information stored in the biSize field to
locate the color table in a BITMAPINFO data structure with a method such